#!/usr/bin/python3

import subprocess


def check(command):
    functions = {
        'set': check_set
    }
    return functions[command.split()[1]](command)


def check_set(command):
    argv = command.split()
    filename, section, var, value = \
        argv[2], argv[3], argv[4], argv[5]
    noindent = False if len(argv) < 7 else argv[6]
    com_symbol = '#' if len(argv) < 8 else argv[7]
    view_comments = False if len(argv) < 9 else argv[8]
    separator = '=' if len(argv) < 10 else argv[9]
    with open(filename) as inp:
        lines = inp.readlines()

    old_set_index = -1
    current_section = False
    for i in range(len(lines)):
        if lines[i].strip() == '':
            continue
        line = lines[i].split(separator.strip())
        for j in range(len(line)):
            line[j] = line[j].strip()
        if line[0] == f'[{section}]':
            current_section = True
        elif '[' in line[0]:
            current_section = False
        if current_section and line[0] == var:
            old_set_index = i
            break

    subprocess.run(command, shell=True)
    with open(filename) as inp:
        newlines = inp.readlines()
    current_section = False
    var_found = False
    for i in range(len(newlines)):
        line = newlines[i]
        if line.strip() == '':
            continue
        line = line.split(separator.strip())
        for j in range(len(line)):
            line[j] = line[j].strip()
        if line[0] == f'[{section}]':
            current_section = True
        elif '[' in line[0]:
            current_section = False
        if current_section:
            if line[0] == var:
                # Найдено несколько установленных переменных
                if var_found:
                    print(1)
                    return False
                # Неверное значение
                if line[1] != value:
                    print(2)
                    return False
                # Есть отступ, когда его не должно быть
                if noindent and newlines[i].startswith(' '):
                    print(3)
                    return False
                var_found = True
                index_found = i
    # Переменная не найдена
    if not var_found:
        print(4)
        return False
    # Кроме добавления строки с переменной, в файле поменялось что-то ещё
    if old_set_index == -1:
        if newlines[:index_found] + newlines[index_found + 1:] != lines:
            return False
    # Если у переменной уже было значение
    else:
        # Если поменялась какая-то другая строка
        if old_set_index != index_found:
            return False
        # Если поменялось что-то, кроме строки с этой переменной
        if lines[:index_found] + [newlines[index_found]] + lines[index_found + 1:] != newlines:
            return False
    return True


commands = [
    'py-ini-config set a.ini b c d',
    'py-ini-config set a.ini h t 35'
]
for command in commands:
    print(f'{command}: {check(command)}')
